package com.async.designpatterns.create.factory;

/**
 * Created by wenzhuo on 2018/1/1.
 */
public class SenderFactory {
    private final static String SMS_SENDER="sms";
    private final static String MAIL_SENDER="mail";

    //1、单个工厂方法
    //通过传递参数创建不同的对象，用户需要提前知道参数，不太方便
    public Sender produce(String type){
        if (MAIL_SENDER.equals(type.toLowerCase())){
            return new MailSender();
        }
        if (SMS_SENDER.equals(type.toLowerCase())){
            return new SmsSender();
        }
        return null;
    }

    //2、多个工厂方法
    //通过不同的创建方法，创建不同类型的对象，但是需要提前实例化factory
    public Sender mailSenderProduce(){
        return new MailSender();
    }

    public Sender smsSenderProduce(){
        return new SmsSender();
    }


    //3、静态工厂方法
    //不需要实例化factory类，通过方法创建不同的对象，简单直接，推荐做法
    /**
     * @return
     */
    public static Sender mailSender(){
        return new MailSender();
    }

    /**
     * @return
     */
    public static Sender smsSender(){
        return new SmsSender();
    }

}
